package database

import (
	"fmt"
	"log"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func (d *databaseImpl) openMySQLDB() error {
	db, err := gorm.Open(mysql.Open(d.dsn), &gorm.Config{
		Logger: d.logger,
		// 关键修改：确保不禁用外键约束
		DisableForeignKeyConstraintWhenMigrating: false,
	})
	if err != nil {
		return fmt.Errorf("数据库连接失败：%v", err)
	}
	sqlDB, err := db.DB()
	if err != nil {
		return fmt.Errorf("无法获取泛型数据库对象：%v", err)
	}
	sqlDB.SetMaxIdleConns(10)
	sqlDB.SetMaxOpenConns(100)
	sqlDB.SetConnMaxLifetime(time.Hour)
	sqlDB.SetConnMaxIdleTime(5 * time.Minute)

	// 在进行数据库操作之前尝试连接
	if err := sqlDB.Ping(); err != nil {
		return fmt.Errorf("无法 ping 数据库：%v", err)
	}
	log.Printf("数据库初始化完毕...")
	d.db = db
	d.opened = true
	d.sqlDB = sqlDB
	return nil
}
